FolderStatusModel: only create a single QFileIconProvider object
authorJyrki Gadinger <nilsding@nilsding.org>
Thu, 20 Feb 2025 13:03:11 +0000 (14:03 +0100)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Thu, 20 Feb 2025 16:24:06 +0000 (16:24 +0000)
otherwise the icons will end up being loaded from the system each time,
which on Windows takes quite long (I saw many calls to
`shell32.dll!SHDefExtractIcon` during profiling)

Signed-off-by: Jyrki Gadinger <nilsding@nilsding.org>
src/gui/folderstatusmodel.cpp
src/gui/folderstatusmodel.h

index d67e6e747521e4e7334ab865246be381118942c4..d1211d7412c713a38d5234012986f0b92190c51f 100644 (file)
@@ -21,7 +21,6 @@
 #include <account.h>
 #include <theme.h>
 
-#include <QFileIconProvider>
 #include <QVarLengthArray>
 #include <set>
 
@@ -194,7 +193,7 @@ QVariant FolderStatusModel::data(const QModelIndex &index, int role) const
             } else if (subfolderInfo._size > 0 && isAnyAncestorEncrypted(index)) {
                 return QIcon(QLatin1String(":/client/theme/lock-broken.svg"));
             }
-            return QFileIconProvider().icon(subfolderInfo._isExternal ? QFileIconProvider::Network : QFileIconProvider::Folder);
+            return _fileIconProvider.icon(subfolderInfo._isExternal ? QFileIconProvider::Network : QFileIconProvider::Folder);
         }
         case Qt::ForegroundRole:
             if (subfolderInfo._isUndecided || (subfolderInfo._isNonDecryptable && subfolderInfo._checked)) {
index 96b7467d14ddc1110e88d79acfa666c80e1d96f9..7a776a64b8323e290ee1d2bbd71ca4caddec2e4f 100644 (file)
@@ -21,6 +21,7 @@
 #include <QVector>
 #include <QElapsedTimer>
 #include <QPointer>
+#include <QFileIconProvider>
 
 class QNetworkReply;
 namespace OCC {
@@ -161,6 +162,8 @@ private:
      */
     QMap<QPersistentModelIndex, QElapsedTimer> _fetchingItems;
 
+    QFileIconProvider _fileIconProvider;
+
 signals:
     void dirtyChanged();